package cn.itcast.myapplication.db;

import android.content.Context;

import androidx.annotation.NonNull;
import androidx.room.Database;
import androidx.room.Room;
import androidx.room.RoomDatabase;
import androidx.room.migration.Migration;
import androidx.sqlite.db.SupportSQLiteDatabase;

/**
     *
     *  所有Room数据库的基类。所有使用Database进行注释的类都必须扩展此类。
     *  RoomDatabase提供了对底层数据库实现的直接访问，让您更喜欢使用Dao类。
     *
     *  数据库（Database） 数据库类必须满足以下条件： 该类必须带有 @Database 注解，该注解包含列出所有与数据库关联的数据实体的 entities 数组。
     *  该类必须是一个抽象类，用于扩展 RoomDatabase。 对于与数据库关联的每个 DAO 类，数据库类必须定义一个具有零参
     *
     *  为了防止频繁创建Database类，我在这里使用了单例模式，加快数据库访问速度。
     *
     *  以下代码定义了用于保存数据库的 MyDataBase 类。 MyDataBase 定义数据库配置，并作为应用对持久性数据的主要访问点。 数的抽象方法，并返回 DAO 类的实例。
     * */

    @Database(entities = {UserModel.class}, version = 4 ,exportSchema = false)
    public  abstract  class MyDataBase extends RoomDatabase {

        private static MyDataBase instance;//单例

        //获取单例
        public static MyDataBase getInstance(Context context) {

            if (instance == null) {

                //databaseBuilder数据库生成器  allowMainThreadQueries所有主线程查询
                instance = Room.databaseBuilder(context.getApplicationContext(), MyDataBase.class, "mydata.cn.itcast.myapplication.db")
                          .allowMainThreadQueries()
                          .build();

            }

            return instance;

        }

        //用户数据库
        public abstract UserDao userDao();

    }
